package fr.generali.sas.service.flux;

import java.util.List;

import fr.generali.sas.model.v1_0.InfoClientResponse;
import fr.generali.sas.model.v1_0.Flux;

public interface InternalFluxSynchroService {
	/**
	 * renvoie la liste des flux pour un client
	 * 
	 * @param codeIntermediaire
	 *            code de l'intermediaire
	 * @param idClient
	 *            identifiant client
	 * @return liste de flux pour un client appartenant à l'intermediaire
	 * @throws Exception
	 *             si l'accès au depot est impossible
	 * @throws IllegalArgumentException
	 *             si l'un des paramètres est null ou vide ou blanc
	 */
	public List<Flux> getFluxClient(String codeIntermediaire, String idClient) throws IllegalArgumentException, Exception;

	/**
	 * renvoie la liste des flux pour une agence
	 * 
	 * @param codeIntermediaire
	 *            code de l'intermediaire
	 * @return liste de flux appartenant à l'intermediaire
	 * @throws Exception
	 *             si l'accès au depot est impossible
	 * @throws IllegalArgumentException
	 *             si l'un des paramètres est null ou vide ou blanc
	 */
	 public List<Flux> getFluxAgence(String codeIntermediaire) throws IllegalArgumentException, Exception;

	/**
	 * renvoie la suite de la liste des flux pour un client
	 * @param codeIntermediaire
	 *            code de l'intermediaire
	 * @param numeroReservation
	 *            idenfiant de la demande (meme role qu'un numero de facture)
	 * @param fromId identifiant du flux à partir duquel l'envoi de flux se poursuit (borne exclusive)
	 * @return liste de flux appartenant à l'intermediaire
	 */
	public List<Flux> getNextFluxClient(String codeIntermediaire,String numeroReservation, int fromId);
	
	/**
	 * @param codeIntermediaire
	 * @param idClient
	 * @return
	 */
	public InfoClientResponse makeInfoClientResponseForClientRequest(String codeIntermediaire, String idClient) throws IllegalArgumentException, Exception;

	/**
	 * @param codeIntermediaire
	 * @return
	 */
	public InfoClientResponse makeInfoClientResponseForAgenceRequest(String codeIntermediaire) throws IllegalArgumentException, Exception;

	/**
	 * @param codeIntermediaire
	 * @param numeroReservation
	 * @param fromId
	 * @return
	 * @throws IllegalArgumentException
	 * @throws Exception
	 */
	public InfoClientResponse makeInfoClientResponseForPoursuivreRequest(String codeIntermediaire, String numeroReservation, int fromId) throws IllegalArgumentException, Exception;

}
